// 它是一个全局变量，在 Node 进程初始化是就挂载了

// 为什么要有 Buffer？

// JS 现有的数据类型：Number、String、Boolean、null、undefined、object、Symbol

// Buffer 表示内存中的一段二进制数据，不要任何编码

// GB2312 中文 => 字节的转换，如果是其他国家，那中文肯定是没用的，其他国家肯定也有自己的编码规则

// 全世界的字符，都使用二进制表示，一个字节是没办法实现的，而且也没有一个统一的编码规范，所以最后就出现了 Unicode 万国码

// unicode 就是全世界的字符 => 二进制的转换规则

// 编码：utf-8

// 字符编码 Unicode 万国码 二进制 => 现实中使用的字符形成对应关系，一个字符对应一个二进制的数字（编码）

// 常用的编码方式就是 utf-8，它存储编码是动态的，有的 Unicode 用一个字节存，有的用两个字节存，有的用三个字节存
// const str = '中国，你好，hello world';
// const buf = Buffer.from(str);
// console.log({ strLen: str.length, bufLen: buf.length });

// const bufToStr = buf.toString('base64');
// console.log({ bufToStr: bufToStr });

function base64encode(strOrbuf) {
    // 如果是 buffer，那么就直接转成 base64
    if (Buffer.isBuffer(strOrbuf)) {
        return strOrbuf.toString('base64');
    }

    return Buffer.from(strOrbuf).toString('base64');
}

function base64decode(str) {
    return Buffer.from(str, 'base64').toString('utf-8');
}

// 使用 base64 编码
// const encode = base64encode('12312j');
// const str = base64decode(encode);
// console.log({ encode, str });

// 转存二进制数据时，或者是想直接操作二进制数据时，我们就可以使用 buffer。
const fs = require('fs');
const str = fs.readFileSync('./abc.jpeg', 'utf-8');
console.log({ str });

// 01010101

// const buf = Buffer.from('');
// console.log({ buf });
